package com.tencent.externalstoragebar.service;

import android.app.Service;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.IBinder;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;

import com.tencent.externalstoragebar.view.RevealView;
import com.tencent.externalstoragebar.view.StorageBarView;
import com.tencent.externalstoragebar.publicthing.PublicData;


public class FloatingWindowService extends Service {

    //服务是否启动
    public static boolean isStart=false;

    //窗口管理者
    public static WindowManager windowManager;
    //悬浮窗视图
    public static View floatingView;

    //背景悬浮窗
    public static View backgroundView;

    //公共信息
    public static WindowManager.LayoutParams params2;


    //是否需要显示
    public static boolean isShow=false;

    //通信的东西
    public static Handler handler=new Handler();

    //这个方法不管
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        //判断服务是否启动
        if (isStart){
            //如果已经启动,则直接返回
            return;
        }
        isStart=true;

        //悬浮窗视图
        floatingView=new StorageBarView(this);

        //获取窗口管理者
        windowManager=(WindowManager) getSystemService(WINDOW_SERVICE);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                2*PublicData.r,//半径是这里设置的
                2*PublicData.r,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, // 类型应用覆盖
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                        |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // 可以触摸
                PixelFormat.TRANSLUCENT // 像素格式半透明
        );

        //设置悬浮窗位置和大小
        params.gravity= Gravity.TOP | Gravity.START;
        params.x= PublicData.x-PublicData.r;
        params.y=PublicData.y-PublicData.r;

        //添加悬浮窗
        //参数一:悬浮窗的布局
        //参数二:悬浮窗的参数
        windowManager.addView(floatingView,params);

        //创建背景视图---------------------------------------------
        //悬浮窗视图
        backgroundView=new RevealView(this);

        //获取窗口管理者
        /*WindowManager.LayoutParams*/ params2 = new WindowManager.LayoutParams(
                2*PublicData.r,//半径是这里设置的
                2*PublicData.r,
                WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, // 类型应用覆盖
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                        |WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, // 可以触摸
                PixelFormat.TRANSLUCENT // 像素格式半透明
        );

        //设置悬浮窗位置和大小
        params2.gravity= Gravity.TOP | Gravity.START;
        params2.x= PublicData.x-PublicData.r;
        params2.y=PublicData.y-PublicData.r;

        //点击事件监听器
        backgroundView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点击后
                if (isShow){
                    //如果已经展示,则进行移除
                    windowManager.removeView(backgroundView);
                    //然后不需要展示了
                    isShow=false;
                }
            }
        });
        //点击事件监听器
        floatingView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //点击后判断情况
                if (isShow){
                    //如果已经展示,什么也不做
                    return;
                }else {
                    //如果没有展示,现在展示
                    //如果没有展示,则需要展示,添加悬浮窗
                    windowManager.addView(backgroundView,params2);
                    //标记为展示中
                    isShow=true;
                }
            }
        });
        //背景悬浮窗
        windowManager.addView(backgroundView,params2);
        isShow=true;


    }

    //展示方法
    public static void show(){
        if (FloatingWindowService.isShow){
            //如果已经在展示,则什么都不做
            return;
        }else {
            //如果没有展示,现在展示
            FloatingWindowService.windowManager.addView(
                    FloatingWindowService.backgroundView,
                    FloatingWindowService.params2
            );
            //标记为展示中
            FloatingWindowService.isShow = true;
        }
    }

    //消失方法
    public static void destroy(){

        if (FloatingWindowService.isShow){
            //如果已经在展示,则进行移除
            FloatingWindowService.windowManager.removeView(
                    FloatingWindowService.backgroundView
            );
            //然后不需要展示了
            FloatingWindowService.isShow=false;
        }
    }


    @Override
    public void onDestroy() {
        super.onDestroy();

        //移除悬浮窗
        if (floatingView != null && windowManager != null) {
            if (backgroundView!=null){
                windowManager.removeView(backgroundView);
            }
            windowManager.removeView(floatingView);
            floatingView = null;

        }
    }
}
